/*
 * SEGUNDA ENTREGA DEL PROYECTO DE BASES DE DATOS "BIBLIOTECA DIGITAL"
 * 
 * Integrantes:
 * Gamboa Edwin Ricardo Cód: 0926631 plan: 2711
 * Portilla Cortes Maria Cristina Cód: 0844113 plan: 3743 
 * Rosero Rosero Luis Alberto Cód: 0943740 plan:3743
 * 
 */
package accesoDatos;
import java.sql.*;
import logica.*;
import java.util.*;
import javax.swing.*;

/**
 *
 * @author Gamboa Family
 */
public class DaoUsuario {

    FachadaBD fachada;

    public DaoUsuario(){
        fachada= new FachadaBD();
    }

   public void registrarUsuario(Usuario usuario){
        String sql_registrar; 

        sql_registrar="INSERT INTO usuario "+ "VALUES ('" +
                          usuario.getCodigo()+ "', '" +
                          usuario.getNombre()+ "', '" +
                          usuario.getApellido() +"', '" +
                          usuario.getgenero()+"', '" +
                          usuario.getFechaDeNacimiento()+"', '" +
                          usuario.getNivelEscolaridad()+"', '" +
                          usuario.getVinculo_UV()+"', '" +
                          usuario.getContrasena()+"', '" +
                          usuario.getPreguntaSecreta()+"', '" +
                          usuario.getRespuestaSecreta()+"', '" +
                          usuario.getLogin()+"', '" +
                          usuario.getTipoUsuario()+"', '" +
                          usuario.getCorreoElectrónico()+"', '" +
                          usuario.getFechaDeRegistro()+"', '" +
                          usuario.getEstadoUsuario()+ "');";
                          
        ejecutarUpdate(sql_registrar);       
    }

    public int ejecutarUpdate(String insert){
        try{
            Connection conn= fachada.conectar();
            Statement sentencia = conn.createStatement();
            int numFilas = sentencia.executeUpdate(insert);
            conn.close();
            return numFilas;
        }
        catch(SQLException e){ System.out.println(e); }
        catch(Exception e){ System.out.println(e); }
        return -1;
    }

    public Vector<String> consultarUsuarioPorApellidos(String apellido){
        Vector<String> v=new Vector();
        String retorno;
        String sql_select;
        sql_select="SELECT codigo_usuario,nombres_usuario, apellidos_usuario,estado_usuario "
                + "FROM usuario WHERE apellidos_usuario like '%"+apellido+"%';";

         try{
            Connection conn= fachada.conectar();
            Statement sentencia = conn.createStatement();
            ResultSet tabla = sentencia.executeQuery(sql_select);
            while(tabla.next()){
                String estados[]={"Activo","Desactivado"};
                String estado;
                if(tabla.getString(4).equals("0")){
                    estado=estados[0];
                }
                else{
                    estado=estados[1]; 
                }
               retorno="Codigo:\t" + tabla.getString(1) + "\tNombre:\t"
                       + tabla.getString(2) + "\tApellido:\t" +  tabla.getString(3)+"\tEstado:\t"+estado;
               v.add(retorno);
            }
            conn.close();
             System.out.println("Conexion cerrada");

         }
         catch(SQLException e){ System.out.println(e); } 
         catch(Exception e){ System.out.println(e); }
        for(int i=0;i<v.size();i++)
            System.out.println(v.get(i));
         return v;
    }

    public Vector<String> consultarUsuarioPorCodigo(String codigo){
        Vector<String> v=new Vector();
        String retorno;
        String sql_select;
        sql_select="SELECT codigo_usuario,nombres_usuario, apellidos_usuario,estado_usuario "
                + "FROM usuario WHERE codigo_usuario='"+codigo+"'";
        
         try{
            Connection conn= fachada.conectar();
            Statement sentencia = conn.createStatement();
            ResultSet tabla = sentencia.executeQuery(sql_select);
            while(tabla.next()){
                String estados[]={"Activo","Desactivado"};
                String estado;
                if(tabla.getString(4).equals("0")){
                    estado=estados[0];
                }
                else{
                    estado=estados[1];
                }
               retorno="Codigo:\t" + tabla.getString(1) + "\tNombre:\t"
                       + tabla.getString(2) + "\tAppelido:\t" +  tabla.getString(3)+"\tEstado:\t"+estado;
               v.add(retorno);
            }
            conn.close();
             System.out.println("Conexion cerrada");

         }
         catch(SQLException e){ System.out.println(e); }
         catch(Exception e){ System.out.println(e); }
         return v;
    } 

   public Usuario retornarUsuarioPorCodigo(String codigo){ 

       Usuario usuario= new Usuario();
        String sql_select;
        sql_select="SELECT codigo_usuario,nombres_usuario, apellidos_usuario,genero_usuario,fecha_nacimiento_usuario,nivel_escolar_usuario,vinculo_uv_usuario," +
                   "contrasena_usuario,pregunta_secreta,respuesta_secreta,login_usuario,tipo_usuario,correo_usuario, estado_usuario FROM usuario WHERE codigo_usuario='"+codigo+"';";
        try{
            Connection conn= fachada.conectar();
            System.out.println("consultando en la bd");
            Statement sentencia = conn.createStatement();
            ResultSet tabla = sentencia.executeQuery(sql_select);

            while(tabla.next()){
                usuario.setCodigo(tabla.getString(1));
                usuario.setNombre(tabla.getString(2));
                usuario.setApellido(tabla.getString(3));
                usuario.setgenero(tabla.getString(4));
                usuario.setFechaDeNacimiento(tabla.getString(5));
                usuario.setNivelEscolaridad(tabla.getString(6));
                usuario.setVinculo_UV(tabla.getString(7));
                usuario.setContrasena(tabla.getString(8));
                usuario.setPreguntaSecreta(tabla.getString(9));
                usuario.setRespuestaSecreta(tabla.getString(10));
                usuario.setLogin(tabla.getString(11));
                usuario.setTipoUsuario(tabla.getString(12));
                usuario.setCorreoElectrónico(tabla.getString(13));
                usuario.setEstadoUsuario(tabla.getString(14));
                System.out.println("Objeto usuario creado");
            }
            conn.close();
            return usuario;
         }
         catch(SQLException e){ System.out.println(e); }
         catch(Exception e){ System.out.println(e); }
        return null;
    }
   
    public void modificarUsuario (int caso, String cod_usuario,String valor){
        String actualizacion;
        switch(caso){
            case 1:
                actualizacion = "UPDATE usuario SET nombres_usuario = \'" + valor + "\' "
                + "WHERE codigo_usuario = \'"+ cod_usuario + "\'";
                ejecutarUpdate(actualizacion);
                break;
            case 2:
                actualizacion = "UPDATE usuario SET apellidos_usuario = \'" + valor + "\' "
                + "WHERE codigo_usuario = \'"+ cod_usuario + "\'";
                ejecutarUpdate(actualizacion);
                break;
            case 3:
                actualizacion = "UPDATE usuario SET genero_usuario = \'" + valor + "\' "
                + "WHERE codigo_usuario = \'"+ cod_usuario + "\'";
                ejecutarUpdate(actualizacion);
                break;
           case 4:
                actualizacion = "UPDATE usuario SET fecha_nacimiento_usuario = \'" + valor + "\' "
                + "WHERE codigo_usuario = \'"+ cod_usuario + "\'";
                ejecutarUpdate(actualizacion);
                break;
           case 5:
                actualizacion = "UPDATE usuario SET nivel_escolar_usuario = \'" + valor + "\' "
                + "WHERE codigo_usuario = \'"+ cod_usuario + "\'";
                ejecutarUpdate(actualizacion);
                break;
           case 6:
                actualizacion = "UPDATE usuario SET vinculo_uv_usuario = \'" + valor + "\' "
                + "WHERE codigo_usuario = \'"+ cod_usuario + "\'";
                ejecutarUpdate(actualizacion);
                break;
           case 7:
                actualizacion = "UPDATE usuario SET contrasena_usuario = \'" + valor + "\' "
                + "WHERE codigo_usuario = \'"+ cod_usuario + "\'";
                ejecutarUpdate(actualizacion);
                break;
           case 8:
                actualizacion = "UPDATE usuario SET pregunta_secreta = \'" + valor + "\' "
                + "WHERE codigo_usuario = \'"+ cod_usuario + "\'";
                ejecutarUpdate(actualizacion);
                break;
           case 9:
                actualizacion = "UPDATE usuario SET respuesta_secreta = \'" + valor + "\' "
                + "WHERE codigo_usuario = \'"+ cod_usuario + "\'";
                ejecutarUpdate(actualizacion);
                break;
           case 10:
                actualizacion = "UPDATE usuario SET login_usuario = \'" + valor + "\' "
                + "WHERE codigo_usuario = \'"+ cod_usuario + "\'";
                ejecutarUpdate(actualizacion);
                break;
           case 11:
                actualizacion = "UPDATE usuario SET tipo_usuario = \'" + valor + "\' "
                + "WHERE codigo_usuario = \'"+ cod_usuario + "\'";
                ejecutarUpdate(actualizacion);
                break;
           case 12:
                actualizacion = "UPDATE usuario SET correo_usuario = \'" + valor + "\' "
                + "WHERE codigo_usuario = \'"+ cod_usuario + "\'";
                ejecutarUpdate(actualizacion);
                break;
           case 13:
                actualizacion = "UPDATE usuario SET estado_usuario = \'" + valor + "\' "
                + "WHERE codigo_usuario = \'"+ cod_usuario + "\'";
                ejecutarUpdate(actualizacion);
                break;
        } 
    }

    public void desactivarUsuario(String cod_usuario){
        String desactivar;
        desactivar= "UPDATE usuario SET estado_usuario='1' WHERE codigo_usuario = \'"+cod_usuario+ "\'";
        ejecutarUpdate(desactivar);


    }
    
    public boolean existeCodigo(String codigo){
        String sql_select, aux="";
        sql_select="SELECT codigo_usuario FROM usuario "
                + "WHERE codigo_usuario =\'" + codigo+ "\'";
        
        try{
            Connection conn= fachada.conectar();
            System.out.println("consultando en la bd");
            Statement sentencia = conn.createStatement();
            ResultSet tabla = sentencia.executeQuery(sql_select);
            
            while(tabla.next()){
                aux=tabla.getString(1);
                System.out.println(aux);
            }
            conn.close();            
         }
        catch(SQLException e){ System.out.println(e); }
        catch(Exception e){ System.out.println(e); }
        if(aux.equals(codigo))
            return true;
        else 
            return false;
    }
    
    public boolean existeLogin(String login){
        String sql_select, aux="";
        sql_select="SELECT login_usuario FROM usuario "
                + "WHERE login_usuario =\'" + login+ "\'";
        
        try{
            Connection conn= fachada.conectar();
            System.out.println("consultando en la bd");
            Statement sentencia = conn.createStatement();
            ResultSet tabla = sentencia.executeQuery(sql_select);
            
            while(tabla.next()){
                aux=tabla.getString(1);
                System.out.println(aux);
            }
            conn.close();            
         }
        catch(SQLException e){ System.out.println(e); }
        catch(Exception e){ System.out.println(e); }
        if(aux.equals(login))
            return true;
        else 
            return false;
    }
    
     public int usuarioIdentificado(String login, String contrasena){
        String password="";
        String sql_select = "SELECT contrasena_usuario FROM usuario WHERE login_usuario = \'" + login +"\'";
    	
        try{
            Connection conn= fachada.conectar();
            System.out.println("consultando en la bd");
            Statement sentencia = conn.createStatement();
            ResultSet tabla = sentencia.executeQuery(sql_select);
            
            while(tabla.next()){
                password=tabla.getString(1);
            }
            conn.close();            
         }
        catch(SQLException e){ System.out.println(e); }
        catch(Exception e){ System.out.println(e); }
        //No esxiste
        if(password.equals(""))
            return 0;
        //Existe y contrasena es correcta
        if(password.equals(contrasena))
            return 1; 
        //Existe pero la contrasena es incorrecta
        else 
            return 2;
    }
     
    public String tipoUsuario (String login){
        String tipoUsuario="";
        String sql_select = "SELECT tipo_usuario FROM usuario WHERE login_usuario = \'" + login +"\'";
    	
        try{
            Connection conn= fachada.conectar();
            System.out.println("consultando en la bd");
            Statement sentencia = conn.createStatement();
            ResultSet tabla = sentencia.executeQuery(sql_select);
            
            while(tabla.next()){
                tipoUsuario=tabla.getString(1);
            }
            conn.close();            
         }
        catch(SQLException e){ System.out.println(e); }
        catch(Exception e){ System.out.println(e); }
        return tipoUsuario;
    }
    
    public void guardarAreaAgregada(String cod_area, String cod_usr){
        String sql_guardar;
        sql_guardar="INSERT INTO area_usuario(codigo_area, codigo_usuario) "
                + "VALUES ('" +
                cod_area + "', '" + cod_usr + "');";
        ejecutarUpdate(sql_guardar);                
    }
    
}// Fin Clase    

